/// 命令接口，只有一个函数
trait Cammand {

    fn execute(&self);

}

/// 创建几个具体的命令，分别是播放cctv1-3
struct Cctv1<'a> {
    reciver: &'a Tv
}
struct Cctv2<'a> {
    reciver: &'a Tv
}
struct Cctv3<'a> {
    reciver: &'a Tv
}

/// 分别实现命令
impl <'a> Cammand for Cctv1<'a> {
    fn execute(&self) {
        self.reciver.cctv1();
    }

   
}
impl <'a> Cammand for Cctv2<'a> {
    fn execute(&self) {
        self.reciver.cctv2();
    }
}

impl <'a> Cammand for Cctv3<'a> {
    fn execute(&self) {
        self.reciver.cctv3();
    }
}

// 创建一个接收者
struct Tv;

impl Tv {
    fn cctv1(&self) {
        println!("播放cctv1")
    }

    fn cctv2(&self) {
        println!("播放cctv2")
    }

    fn cctv3(&self) {
        println!("播放cctv3")
    }
}

/// 创建客户端类，也即是遥控器,们直接创建一个函数标识，用外部调用
pub fn client() {
    // 电视机
    let tv = Tv;

    //创建命令，绑定接收者
    let c = Cctv1{reciver:&tv};

    // 执行命令
    c.execute();
}




